package cn.cdyx.ydhl.service;

import cn.cdyx.common.config.YXTableNameHandler;
import cn.cdyx.common.exception.BusinessException;
import cn.cdyx.common.exception.SystemException;
import cn.cdyx.common.pojo.Code;
import cn.cdyx.common.pojo.TBYZZXJL;
import cn.cdyx.common.pojo.TBZYYZYL;
import cn.cdyx.common.pojo.TBZYYZYP;
import cn.cdyx.common.utils.DateTimeUtil;
import cn.cdyx.common.utils.TableNameUtil;
import cn.cdyx.common.utils.YXSysNumberUtil;
import cn.cdyx.ydhl.mapper.YZZXJLMapper;
import cn.cdyx.ydhl.mapper.ZYYZYLMapper;
import cn.cdyx.ydhl.mapper.ZYYZYPMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Author Watermelon
 * @Date 2023-01-31 10:48
 */
@Service
@Slf4j
public class YZZXJLService {
    @Autowired
    private YZZXJLMapper yzzxjlMapper;
    @Autowired
    private ZYYZYPMapper zyyzypMapper;
    @Autowired
    private ZYYZYLMapper zyyzylMapper;

    /**
     * 保存医嘱执行记录
     * @param tbyzzxjl
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveYZZXJL(TBYZZXJL tbyzzxjl){
        String cbqbm = yzzxjlMapper.queryZYBQ(tbyzzxjl.getCzyh());
        if(cbqbm==null){
            throw new BusinessException(Code.SELECT_ERR,"住院号["+tbyzzxjl.getCzyh()+"]未查询到在院病人！",null);
        }
        String czxph = YXSysNumberUtil.getSysNumber2("CYZZXJLPH", 1, "00");
        tbyzzxjl.setCzxph(czxph);
        tbyzzxjl.setDzxbegin(tbyzzxjl.getDzx());
        tbyzzxjl.setDzxend(tbyzzxjl.getDzx());
        tbyzzxjl.setCbeginhsbm(tbyzzxjl.getClrgh());
        tbyzzxjl.setCbeginhsmc(tbyzzxjl.getClrxm());
        tbyzzxjl.setDzx(DateTimeUtil.YDHLDate(tbyzzxjl.getDzx()));
        tbyzzxjl.setIzxqk(1);
        String tableName = TableNameUtil.getTableName("TBZYYZYPBQ", cbqbm);
        YXTableNameHandler.setTableName(tableName);
        TBZYYZYP tbzyyzyp = zyyzypMapper.selectById(tbyzzxjl.getCyzh());
        if(tbzyyzyp==null){
            String tableNameYL = TableNameUtil.getTableName("TBZYYZYLBQ", cbqbm);
            YXTableNameHandler.setTableName(tableNameYL);
            TBZYYZYL tbzyyzyl = zyyzylMapper.selectById(tbyzzxjl.getCyzh());
            if (tbzyyzyl==null) {
                throw new BusinessException(Code.SELECT_ERR, "医嘱号[" + tbyzzxjl.getCyzh() + "]未查询到医嘱信息！", null);
            }
            tbyzzxjl.setCyzph(tbzyyzyl.getCyzph());
            tbyzzxjl.setDxd(tbzyyzyl.getDxd());
            tbyzzxjl.setCxdysbm(tbzyyzyl.getCxdysbm());
            tbyzzxjl.setCxdysmc(tbzyyzyl.getCxdys());
            tbyzzxjl.setIcq(tbzyyzyl.getIcq());
            tbyzzxjl.setCrybh(tbzyyzyl.getCrybh());
            tbyzzxjl.setCyzzl(tbzyyzyl.getCyzzl());
            tbyzzxjl.setCyzfl(tbzyyzyl.getCyzfl());
            tbyzzxjl.setCyzzxfl(tbzyyzyl.getCyzzxfl());
            tbyzzxjl.setIyzly(tbzyyzyl.getIyzly());
            tbyzzxjl.setCyznr(tbzyyzyl.getCyznr());
            tbyzzxjl.setIypycbm(tbzyyzyl.getIypycbm());
            tbyzzxjl.setCypyc(tbzyyzyl.getCypyc());
        }else{
            tbyzzxjl.setCyzph(tbzyyzyp.getCyzph());
            tbyzzxjl.setDxd(tbzyyzyp.getDxd());
            tbyzzxjl.setCxdysbm(tbzyyzyp.getCxdysbm());
            tbyzzxjl.setCxdysmc(tbzyyzyp.getCxdys());
            tbyzzxjl.setIcq(tbzyyzyp.getIcq());
            tbyzzxjl.setCrybh(tbzyyzyp.getCrybh());
            tbyzzxjl.setCyzzl(tbzyyzyp.getCyzzl());
            tbyzzxjl.setCyzfl(tbzyyzyp.getCyzfl());
            tbyzzxjl.setCyzzxfl(tbzyyzyp.getCyzzxfl());
            tbyzzxjl.setIyzly(tbzyyzyp.getIyzly());
            tbyzzxjl.setCyznr(tbzyyzyp.getCyznr());
            tbyzzxjl.setIypycbm(tbzyyzyp.getIypycbm());
            tbyzzxjl.setCypyc(tbzyyzyp.getCypyc());
            tbyzzxjl.setCypyfbm(tbzyyzyp.getCypyfbm());
            tbyzzxjl.setCypyf(tbzyyzyp.getCypyf());
        }
        String TBZYYZZX = TableNameUtil.getTableName("TBZYYZZXJLBQ", cbqbm);
        YXTableNameHandler.setTableName(TBZYYZZX);
        yzzxjlMapper.insert(tbyzzxjl);
    }
}
